Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

김승우 4주차 과제 구현 #2

Open
wants to merge 13 commits into
base: main
Choose a base branch
from

Conversation

kyh196201
Copy link

@kyh196201 kyh196201 commented Oct 2, 2023

일주일이나 늦었지만 PR 올립니다!

  • 배열로 구현하는 비순차 심볼 테이블 구현하기
  • 이진 탐색 순차 심볼 테이블에 메서드 추가하기
  • 이진 탐색 트리 순차 심볼 테이블에 높이 구하는 메서드 추가하기
  • 레드 블랙 트리 값 추가하는 과정 그리기
  • 개별 체이닝 해싱 테이블
  • 선형 탐지 해싱 테이블 구현하기

problem-3 이진 탐색 트리 그림

BST 그림


problem-5 개별 체이닝 해시 테이블 그림

개별 체이닝 해시 테이블


Comment on lines 29 to 33
get(key) {
const node = this.#items.find((item) => item.key === key);

return node?.item;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  get(key) {
    return this.#items.find((item) => item.key === key)?.item;
  }

이렇게 더 많이 쓰긴 합니다. 왜냐하면 node라는 변수 혹은 상수를 사용하는 순간

  get(key) {
    const node = this.#items.find((item) => item.key === key);

    // 여기에 다른 누군가가 node를 가지고 무언가를 할 수 있는 가능성이 생김.

    return node?.item;
  }

그래서 아예 그런 의도를 차단할려면 변수를 생성하지 않는게 좋을 수도 있습니다

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요즘 습관적으로 변수 선언해서 값을 받은 다음 리턴하는 구조로 코드를 작성하고 있는데, 말씀해주신 대로 변수를 선언할 경우 다른 사람이 선언한 변수를 이용할 가능성도 있겠네요! 감사합니다

Comment on lines 36 to 42
const curIndex = this.#findIndex(key);

if (curIndex >= 0) {
this.#items[curIndex].item = item;

return;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

    const curIndex = this.#findIndex(key);
    if (curIndex >= 0) {
      this.#items[curIndex].item = item;

      return;
    }

개인적인 의견이지만, 이 사이는 붙이는게 좋은 것 같아요. 바로 위 코드랑 연관이 높고, 나온 값에 대해서 처리를 하는거라서 붙이는게 좋은 것 같아요. 아마 제가 Golang을 사용해서 영향을 받은 것도 있는 것 같기도 하고요. Golang에서는 이런 문법은 많이 쓰거든요.

data, err := getSomething
if err == nil {
    return
}

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이것도 제 습관이네요 ㅠ
변수 선언하고 항상 한 줄 씩 띄우고 있었는데, 코드가 연관될 경우 라인을 붙이는 것도 좋은 것 같습니다! 감사합니다

Comment on lines 152 to 167
keysRange(start, end) {
const i = this.rank(this.ceiling(start));
const j = this.rank(this.floor(end));

if (i > j || i < 0 || j >= this.#n) {
return [];
}

const keys = [];

for (let k = i; k <= j; k++) {
keys.push(this.#keys[k]);
}

return keys;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주어진 시작 키보다 큰 수 중에 가장 작은 수의 위치, 주어진 끝 키보다 작은 수 중에 가장 큰 키의 위치를 구해서, 해당 구간의 모든 키 목록을 반환하는거군요 ㅎㅎ 기존 메서드를 활용해서 구현해 주셨네요

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네 ㅎㅎ ceiling이랑 floor 메서드를 이용하면 되겠네! 라는 생각이 순간적으로 들어서 구현했는데, 잘 되더라구요!

변수명이 i, j로 작성되어 있어서 가독성이 떨어지네요 ..!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants